from scipy import optimize
import matplotlib.pyplot as plt
import numpy as ny


def f(x):
    return x ** 4 - 6 * x ** 3 + 9 * x - 2


def diff_x(x):
    return 4 * x ** 3 - 18 * x ** 2 + 9


def diff_diff_x(x):
    return 12 * x ** 2 - 36 * x


if __name__ == '__main__':
    # 如何求解 diff_diff_x == 0 时 x 的值
    root = optimize.fsolve(diff_diff_x, -2)
    print(root)

    # 计算 f(x) 的值
    x = ny.linspace(-2, 2, 100)
    y = f(x)

    plt.plot(x, y, label="f(x)")
    #
    # 计算 diff_diff_x(x) 的值
    diff = diff_diff_x(x)
    plt.plot(x, diff, label="diff_diff_x(x)")
    #
    # # 设置 x 轴 标识
    # plt.xlabel("x")
    # # 设置 y 轴 标识
    # plt.ylabel(("f(x) diff_f(x)"))
    #
    # 显示设置的图例
    plt.legend()
    #
    # 在 x = 0 的位置绘制一条直线
    plt.axvline(0, color="grey", linestyle='--', alpha=0.6)
    # 在 y = 0 的位置绘制一条直线
    plt.axhline(0, color="grey", linestyle='--', alpha=0.6)
    plt.show()
